/*!
 * \file WtUftStraFact.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader UFT超高频策略工厂头文件
 * 
 * \details 该文件定义了WtUftStraFact类，实现UFT超高频策略工厂接口，负责：
 *          - UFT超高频策略的创建和销毁
 *          - 策略名称枚举和管理
 *          - 工厂名称标识
 *          - 超高频策略实例生命周期管理
 *          
 *          支持的策略类型：
 *          - UftDemo超高频示例策略：展示UFT策略基本框架
 *          - 其他自定义UFT超高频策略
 *          
 *          超高频交易特性：
 *          - 微秒级响应速度：极致的延迟优化
 *          - 海量订单处理：高并发订单管理能力
 *          - 超低延迟数据处理：毫秒以下的数据响应
 *          - 精密的市场微观结构分析：深度挖掘价格形成机制
 *          
 *          技术架构优化：
 *          - 无锁编程：使用SpinMutex等高性能同步原语
 *          - 内存对齐：优化缓存行使用提高性能
 *          - 零拷贝技术：减少不必要的数据拷贝
 *          - NUMA感知：针对多核架构的内存访问优化
 *          
 *          应用场景：
 *          - 做市商策略：提供流动性获取价差收益
 *          - 套利交易：捕捉极短时间内的价格差异
 *          - 动量交易：快速响应市场动量变化
 *          - 流动性捕获：在大单冲击时快速反应
 *          
 *          作为超高频交易系统的核心组件，支持策略的动态加载和管理
 */

#pragma once
#include "../Includes/UftStrategyDefs.h"

USING_NS_WTP;

/*!
 * \class WtUftStraFact
 * \brief WonderTrader UFT超高频策略工厂
 * 
 * \details 该类实现了IUftStrategyFact接口，提供UFT超高频策略的工厂管理功能：
 *          
 *          核心功能：
 *          - 策略创建：根据策略名称和ID创建具体超高频策略实例
 *          - 策略销毁：安全释放策略实例资源
 *          - 策略枚举：遍历工厂支持的所有超高频策略类型
 *          - 工厂标识：提供唯一的工厂名称标识
 *          
 *          设计模式：
 *          - 工厂模式：封装超高频策略创建逻辑
 *          - 插件模式：支持动态加载和扩展
 *          - RAII模式：自动管理策略生命周期
 *          
 *          超高频策略特性：
 *          - 极致性能：微秒级策略实例化和管理
 *          - 内存优化：超高效的对象池管理
 *          - 并发安全：无锁数据结构和算法
 *          - 实时性能：支持实时策略热插拔和参数调整
 *          
 *          技术架构：
 *          - 零延迟设计：最小化策略创建和销毁开销
 *          - 缓存友好：优化数据结构布局提高访问效率
 *          - 异常安全：完善的错误处理不影响交易性能
 *          - 可扩展性：支持新的超高频算法快速集成
 * 
 * \note 该工厂类专门用于UFT超高频策略的统一管理和创建
 * \warning 超高频交易对性能要求极高，需要特别注意延迟和并发安全
 * \see IUftStrategyFact, UftStrategy, WtUftStraDemo
 */
class WtUftStraFact : public IUftStrategyFact
{
public:
	/*!
	 * \brief 构造函数
	 */
	WtUftStraFact();
	
	/*!
	 * \brief 析构函数
	 */
	virtual ~WtUftStraFact();

public:
	/*!
	 * \brief 获取工厂名称
	 * \return 工厂名称字符串
	 * 
	 * \details 返回该工厂的唯一标识名称，用于区分不同的超高频策略工厂
	 */
	virtual const char* getName() override;

	/*!
	 * \brief 枚举工厂支持的超高频策略
	 * \param cb 枚举回调函数，用于接收策略名称
	 * 
	 * \details 遍历工厂支持的所有超高频策略类型，通过回调函数返回策略名称：
	 *          - 回调函数格式：void callback(const char* strategyName)
	 *          - 可用于超高频策略列表展示和动态配置
	 *          - 支持实时策略发现和管理
	 */
	virtual void enumStrategy(FuncEnumUftStrategyCallback cb) override;

	/*!
	 * \brief 创建超高频策略实例
	 * \param name 策略名称（如"UftDemo"）
	 * \param id 策略实例ID，用于区分同一策略的不同实例
	 * \return 创建的超高频策略实例指针，失败返回nullptr
	 * 
	 * \details 根据指定的策略名称创建对应的超高频策略实例：
	 *          - 支持的策略名称通过enumStrategy方法获取
	 *          - 每个策略实例具有唯一的ID标识
	 *          - 创建失败时返回nullptr，调用者需要检查返回值
	 *          - 超高频策略需要特殊的内存和性能优化
	 *          
	 *          性能优化考虑：
	 *          - 预分配内存池：避免运行时内存分配延迟
	 *          - CPU亲和性设置：绑定到特定CPU核心
	 *          - 优先级调整：提高策略进程调度优先级
	 *          - 网络优化：直接内存访问和旁路内核
	 */
	virtual UftStrategy* createStrategy(const char* name, const char* id) override;

	/*!
	 * \brief 删除超高频策略实例
	 * \param stra 要删除的策略实例指针
	 * \return 删除成功返回true，失败返回false
	 * 
	 * \details 安全删除超高频策略实例并释放相关资源：
	 *          - 检查策略指针有效性
	 *          - 验证策略是否属于本工厂创建
	 *          - 停止所有订单和交易活动
	 *          - 清理网络连接和数据订阅
	 *          - 执行安全删除操作
	 *          - 防止删除其他工厂创建的策略实例
	 *          
	 *          超高频策略特殊处理：
	 *          - 确保所有未完成订单被正确处理
	 *          - 释放超高频数据流订阅
	 *          - 清理实时计算缓存和无锁队列
	 *          - 恢复CPU亲和性和优先级设置
	 */
	virtual bool deleteStrategy(UftStrategy* stra) override;
};

